/*************************************************************************************
*                                  SRL ENGINE                                        *
*                                                                                    *
*                                                                                    *
*  File : SRL_Vector.h                                                               *
*  Author: SRL Killing                                                               *
*  Date: 25/02/10 20:30                                                              *
*  Description:                                                                      *
*                                                                                    *  
*  Licence :  LGPL                                                                   *
*                                                                                    *
*    Copyright (C) 2010 Pecatte Baptiste                                             *
*                                                                                    *
*    This program is free software; you can redistribute it and/or                   *
*    modify it under the terms of the GNU Lesser General Public                      *
*    License as published by the Free Software Foundation; either                    *
*    version 2.1 of the License, or (at your option) any later version.              *
*                                                                                    *
*    This program is distributed in the hope that it will be useful,                 *
*    but WITHOUT ANY WARRANTY; without even the implied warranty of                  *
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU                *
*    Lesser General Public License for more details.                                 *
*                                                                                    *
*    You should have received a copy of the GNU Lesser General Public                *
*    License along with this program; if not, write to the Free Software             *
*    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    *
*                                                                                    *
**************************************************************************************/

#ifndef DefineHeaderVector 
#define DefineHeaderVector 

namespace srl {
    template <class T>
    class Vector {
        public:
            Vector();
            Vector(T a, T b, T c, T d);
            Vector(T a, T b, T c);
            Vector(const srl::Vector<T> &v);
            ~Vector();
            
            Vector<T>& operator+= ( const Vector<T> &v );
            Vector<T>  operator+  ( const Vector<T> &v );
            Vector<T>  operator+  ( const T &v );
            Vector<T>& operator-= ( const Vector<T> &v );
            Vector<T>  operator-  ( const Vector<T> &v );
            Vector<T>& operator*= ( const int a );
            Vector<T>  operator*  ( const int a ); 
            Vector<T>  operator*  ( const Vector<T> &v );
            Vector<T>& operator/= ( const int a );
            Vector<T>  operator/  ( const int a );
            Vector<T>  operator/  ( const Vector<T> &v );
            bool       operator!= ( const Vector<T> &v );
			T&		   operator[] ( const int i );
			
			void cross( const Vector<T> &v );
			void cross( const Vector<T> &v1, const Vector<T> &v2 );
			T dot  ( const Vector<T> &v );
            T All();
            float Length();
            void Normalize();
            
            T x, y, z, w;
    };

};

#include <SRL/Utils/Vector.inl>
#endif
